//
//  WBBaseController.swift
//  czWB
//
//  Created by Qing on 2018/5/25.
//  Copyright © 2018年 成哥哥. All rights reserved.
//

import UIKit
import AFNetworking

class WBBaseController: UIViewController {
    
    /// 访客视图字典信息
    var visitorInfoDictionary: [String: String]?
    
    /// 可重用CellID
    private let cellID = "cellID"
    
    /// 导航条
    lazy var navigationBar = UINavigationBar(frame: CGRect(x: 0, y: UIApplication.shared.statusBarFrame.height, width: UIScreen.main.cz_screenWith, height: 44))
    
    /// 导航条Item
    lazy var navItem = UINavigationItem()
    
    /// 如果没有登录则不显示。
    var tableView: UITableView?
    
    /// 下拉刷新控件
    var refreshController: UIRefreshControl?
    
    /// 上拉刷新标志
    var isPullup = false

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
        WBNetworkManager.shared.userLogon ? loadData() : ()
        
    }
    
    /// 加载数据方法 -- 父类只管方法，不做具体实现，由子类实现具体数据加载
    @objc func loadData()  {
        refreshController?.endRefreshing()
    }
    
    /// 重写title方法，可以保证外部设置title的代码不需要任何的变化
    override var title: String? {
        
        didSet {
            
            navItem.title = title
        }
    }
    
}


// MARK: - 登录&注册 监听方法
extension WBBaseController {
    
    
    /// 用户注册监听方法
    @objc private func didRegister() {
        
        print("用户注册")
    }
    
    
    /// 用户登录监听方法
    @objc private func didLogin() {
        
        print("用户登录")
        
//        发起通知
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: WBUserShouldLoginNotification), object: nil)
        
    }
}

// MARK: - tableView数据源方法--封闭上拉刷新
extension WBBaseController: UITableViewDataSource, UITableViewDelegate {
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        return UITableViewCell()
    }
    
    /// 判断上拉刷新
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
//        1.判断indexPath是否最后一行
//        获得当前行数
        let row = indexPath.row
//        获得组数，当前为第1组
        let section = tableView.numberOfSections - 1

//        print("row:\(row) --- section:\(section)")
//        如果tableView没有创建出来，则返回
        if row < 0 || section < 0 {

            return
        }

//        获得当前总行数（直接填写0可以获得当前最大行数，填写1则变成另外的值，原理不知道为什么）
        let count = tableView.numberOfRows(inSection: section)
        
//        print("count:\(count)--- numberOfRow: \(tableView.numberOfSections)")
        if row == (count - 1) && !isPullup {
            
//          更改是否上拉刷新标识
            self.isPullup = true
            
            loadData()
            
            
        }
    }
    
}


// MARK: - 设置界面
extension WBBaseController {
    
    
    /// 设置UI
    private func setupUI()  {
        
//        视图的背景颜色随机一种
//        view.backgroundColor = UIColor.cz_randomColor
//
//        取消首行缩进 -- 如果隐藏了导航栏，会缩进20个点，但好像没有效果。
//        automaticallyAdjustsScrollViewInsets = false
        
        setupNavagitionBar()
        
//        判断是否登录，登录则显示表格界面， 未登录则显示访客界面
        WBNetworkManager.shared.userLogon ? setTableView() : visitorView()
        
        
    }
    
    
   /// 自定义导航栏
   @objc private func setupNavagitionBar()  {
    
//    在视图上添加导航条
    self.view.addSubview(navigationBar)
//    在导航条增加 item
    navigationBar.items = [navItem]
//    导航条背景颜色
    navigationBar.barTintColor = UIColor.init(hex: "f0f0f0")
//    前景颜色属性
    navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.darkGray]
    
    navigationBar.tintColor = UIColor.orange
    
//    导航条的不透明性，默认是true开启
    navigationBar.isTranslucent = true
    
    }
    
    /// 访客视图
     private func visitorView() {

//      实例化访客视图
        let visitoerView = WBVisitorView(frame: view.bounds)

//      插入访问视图在导航视图的前面
        view.insertSubview(visitoerView, belowSubview: navigationBar)
        
//        访客视图传值
        visitoerView.visitorInfo = visitorInfoDictionary
        
//        用户登录&注册 动作
        visitoerView.loginButton.addTarget(self, action: #selector(didLogin), for: .touchUpInside)
        visitoerView.registerButton.addTarget(self, action: #selector(didRegister), for: .touchUpInside)
        
//        设置导航左/右按钮
        navItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(didLogin))
        navItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(didRegister))

    }
    
    /// 设置表格界面
     @objc func setTableView() {
        
        tableView = UITableView(frame: view.bounds, style: .plain)
        
        view.insertSubview(tableView!, belowSubview: navigationBar)
        
        tableView?.dataSource = self
        tableView?.delegate = self
        tableView?.register(UITableViewCell.self, forCellReuseIdentifier: cellID)
        
//        设置内容缩进（有点像布局，算好上，左，下，右的距离）
        tableView?.contentInset = UIEdgeInsets(top: navigationBar.bounds.height,
                                               left: 0,
                                               bottom: 0,
                                               right: 0)
        
//        上面已经实例化tableView了，因为scrollIndicatorInsets是必选的，所以可以强行解包!
        tableView?.scrollIndicatorInsets = tableView!.contentInset

//        1.实例化 刷新控件
        refreshController = UIRefreshControl()
//        2.在视图上添加 刷新控件
        tableView?.addSubview(refreshController!)
//        3.为刷新控件添加 监听方法
        refreshController?.addTarget(self, action: #selector(WBBaseController.loadData), for: UIControl.Event.valueChanged)
        
    }

}

